#coding: utf-8
import pygame
import tile
import object
from pygame.locals import *

class Screen:
	
	def __init__(self, main, caption="Rogue-like"):
		self.main = main
		self.mess = ''
		self._window = pygame.display.set_mode((640,400))
		pygame.display.set_caption(caption)
		self._mainScreen = pygame.display.get_surface()
		self._field = pygame.Surface((352, 352))
		self._status = pygame.Surface((352, 40))
		self._hud = pygame.Surface((480, 45))
		self._menu = pygame.Surface((180, 350))
		self._menuitem = 0
		if pygame.font:
			self.font = pygame.font.Font('freesansbold.ttf', 15)
		self.tiles = {}
#TODEL - вынести в отдельную функцию - загрузчик тайлов, вызываемый из отдельной функции main.py, которая загружает только тайлы, необходимые на карте. или вообще грузит их "на лету" (тогда можно перенести ее в screen.py)
		self.tiles['4'] = tile.LetterTile('@', (255,255,255), self.font)
		self.tiles['0'] = tile.LetterTile('  . ', (50,50,50), self.font)
		self.tiles['2'] = tile.LetterTile('  * ', (255,0,255), self.font)
		self.tiles['3'] = tile.LetterTile('@', (255,0,255), self.font)
		self.tiles['empty'] = tile.LetterTile('#', (0, 0, 0), self.font)
		self.tiles['wall'] = tile.LetterTile('#', (255,255,255), self.font)
	
	def redrawMap(self): #TODO: отдельные функции для карты, меню, строки состояния, инвентаря, инфо о персонаже и т.д. Переписать redrawMap, чтобы получать данные из карты
		self._mainScreen.fill((0,0,0))
		self._status.fill((0,0,0))
		self._field.fill((25,25,25))
		self._menu.fill((0,0,0))
		if self.main.mode == "menu":
			self.MenuShow()
			self._mainScreen.blit(self._menu, pygame.Rect((360, 5),(635, 395)))
		for cell in self.main.currentMap.getArea(self.main.player):
#			self._field.blit(self.main.actors[obj].rect(), self.main.actors[obj].pos())
			for obj in cell:
				self._field.blit(self.tiles[obj[0]].rect(), self.tiles[obj[0]].rect().get_rect(topleft=obj[1]))
#		self._field.blit(self.tiles['3'].rect(), self.tiles['3'].rect().get_rect(topleft=(0,0)))
		if self.mess:
			self._status.blit(self.mess, self.mess.get_rect(topleft=(0,0)))
		self._mainScreen.blit(self._status, pygame.Rect((5, 360), (352, 400)))
		self._mainScreen.blit(self._field, pygame.Rect((5,5), (352, 352)))
		print self.main.actors[self.main.player].position()
		pygame.display.flip()

	def Font(self):
		return self.font

	def Tile(self, code):
		return self.tiles[code]
		
	def ShowMessage(self, message):
		self.mess = self.font.render(message, 1, (255,255,255))

	def MenuShow(self): #TODO: разные меню
		menuitems = [("Item1",),("Item2",),("Item3",)]
		star = self.font.render('#', 1, (255,0,0))
		for item in menuitems:
			shift = menuitems.index(item)
			it = self.font.render(item[0], 1, (255,255,255))
			self._menu.blit(it, it.get_rect(topleft=(15, shift * 25)))
			if self._menuitem == shift:
				self._menu.blit(star, star.get_rect(topleft = (5, shift * 25 + 5)))
			
